package com.gzsxy.utils;

import org.springframework.util.DigestUtils;

import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;
import java.security.MessageDigest;
import java.util.Base64;

/**
 * @author xiaolong
 * @version 1.0
 * @description: 采用的是java8新增的java.util.Base64
 * @date 2021/9/30 10:11
 */
public class Base64Util {

    /**
     * @param content 待加密字符串字节码
     * @return
     * @description: 转成base64
     */
    public static String encode(byte[] content) {
        String encodeToString = Base64.getEncoder().encodeToString(content);
        return encodeToString;
    }


    /**
     * @param content 待加密字符串（如果不设置解码方式，默认utf-8）
     * @return
     * @description: 加密
     */
    public static String encode(String content) {
        //采用默认的编码方式utf-8
        return encode(content.getBytes(Charset.defaultCharset()));
    }


    /**
     * @param content 待加密字符串
     * @param charset 编码方式
     * @return
     * @description: 加密
     */
    public static String encode(String content, Charset charset) {
        return encode(content.getBytes(charset));
    }


    /**
     * @param content 待解密字符串
     * @param charset 编码方式
     * @return
     * @description: 解密
     */
    public static String decodeForString(String content, Charset charset) {

        byte[] decode = decode(content);
        if (decode == null) {
            return null;
        }
        return new String(decode, charset);
    }

    /**
     * @param content 待解密字符串 （如果不设置解码方式，默认utf-8）
     * @return
     * @description: 解码
     */
    public static String decodeForString(String content) {
        byte[] decode = decode(content);
        if (decode == null) {
            return null;
        }
        return new String(decode, Charset.defaultCharset());
    }

    /**
     * @param content 待解密字符串
     * @return
     * @description: 转为byte数组
     */
    public static byte[] decode(String content) {
        return Base64.getDecoder().decode(content);
    }


    /**
     * @param str 待加密的字符串
     * @return 16进制加密字符串
     * @description: java自带的md5加密
     */
    public static String encryptToMD5(String str) {
        // 加密后的16进制字符串
        String heStr = "";
        try {
            //获得MD5摘要算法的MessageDigest对象
            MessageDigest md5 = MessageDigest.getInstance("MD5");
            //使用指定的字节更新摘要
            md5.update(str.getBytes("utf-8"));
            //获得密文
            byte[] digest = md5.digest();
            for (int i = 0; i < digest.length; i++) {
                heStr += Integer.toHexString((0x000000FF & digest[i]) | 0xFFFFFF00).substring(6);
            }
            return heStr;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "";
    }


    /**
     * @param str 待加密字符串
     * @return 16进制加密字符串
     * @description: springboot自带的md5加密
     */
    public static String toMD5(String str) {
        String md5 = "";
        try {
            md5 = DigestUtils.md5DigestAsHex(str.getBytes("utf-8"));
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        return md5;
    }


    public static void main(String[] args) {
        String zhangxiaolong = encryptToMD5("123456");
        String zhangxiaolong1 = toMD5("123456");
        System.out.println(zhangxiaolong);
        System.out.println(zhangxiaolong1);
    }

}
